package main

import "fmt"
import . "local/algorithm/util"

/**
Reverse a singly linked list.

Example:

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
Follow up:

A linked list can be reversed either iteratively or recursively. Could you implement both?
*/
func reverseList(head *ListNode) *ListNode {
	if head == nil || head.Next == nil {
		return head
	}

	var prev *ListNode
	current := head
	for current != nil {
		tmp := current.Next
		current.Next = prev
		prev = current
		current = tmp
	}

	return prev
}

func main() {
	head := GenerateLinkedList([]int{1, 2, 3})
	revList := reverseList(head)
	fmt.Println(revList)
}
